tg-me.com/BookPython/3664
Last Update:
Многие Python-классы начинаются с похожего шаблона: простой конструктор, тривиальный __repr__
и прочие подобные вещи:
class Server:
def __init__(self, ip, version=4):
self.ip = ip
self._version = version
def __repr__(self):
return '{klass}("{ip!r}", {version!r})'.format(
klass=type(self).__name__,
ip=self.ip,
version=self._version,
)
Один из способов упростить такую рутину — использовать популярный пакет attrs, который автоматически генерирует множество стандартных методов на основе нескольких деклараций:
class Server:
ip = attrib()
_version = attrib(default=4)
server = Server(ip='192.168.0.0.1', version=4)
Этот подход не только создаёт конструктор (
__init__
) и представление (__repr__
), но и полный набор методов сравнения (__eq__
, __lt__
и т. д.).Кроме того, в Python 3.7 появилась стандартная альтернатива — data classes (датаклассы), которые решают ту же задачу (и даже больше). Они используют аннотации переменных — ещё одну относительно новую функцию Python. Вот пример:
@dataclass
class InventoryItem:
name: str
unit_price: float
quantity_on_hand: int = 0
def total_cost(self) -> float:
return self.unit_price * self.quantity_on_hand
Таким образом,
dataclass
тоже автоматически создаёт __init__
, __repr__
, методы сравнения и многое другое, основываясь лишь на аннотациях типов.👉@BookPython
BY Библиотека Python разработчика | Книги по питону
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/BookPython/3664